﻿#ifndef NOSEPIECENIKONLV232_H
#define NOSEPIECENIKONLV232_H

#include <QtCore/QObject>
#include <QtCore/QTimer>
#include <QtCore/QSettings>
#include <QtSerialPort/QtSerialPort>

class NosepieceNikonLV232: public QObject
{
    Q_OBJECT
public:
    explicit NosepieceNikonLV232(QObject *parent = nullptr);

signals:
    /**
     * @brief lensChanged 物镜改变时发出这个信号
     * @param oldLens 原来的物镜， 从 0 开始
     * @param newLens 新的物镜， 从 0 开始
     */
    void lensChanged(int oldLens, int newLens);

public slots:
    /**
     * @brief setLens 设置物镜转盘转到第 n 个物镜位置
     * @param n n 为 从 0 到 4 数字分别代表第 1 个到 第 5 个物镜
     */
    void setLens(int n);
    /**
     * @brief setLens 设置物镜转盘转到第 n 个物镜位置
     * @param oldLens 当前物镜的位置，从 0 开始
     * @param newLens 新物镜，从 0 开始
     */
    void setLens(int oldLens, int newLens);
    /**
     * @brief forward 切换到下一个物镜
     */
    void forward();
    /**
     * @brief reverse 切换到上一个物镜
     */
    void reverse();

    void loadSettings(QSettings &settings);
    void login();
    private slots:
    void dataArrived();
    void onTimer();
private:
    QTimer m_timer;
    QSerialPort * m_serialPort;
    QString m_comPort;
    int m_baudRate;
    int m_dataBits;
    int m_parity;
    int m_stopBits;
    int m_lens;

    int m_state;
    void cmd(QString str);
    void state(char x);
};

#endif // NOSEPIECEOLYMPUSREMCB_H
